package cn.dongqihong.oauth2.common;

/**
 * API 返回状态码<br>
 *
 * Created by DongQihong on 2019-01-02.
 */
public enum ApiResultCode {

    /**
     * 服务器内部错误
     */
    ERROR(-1, "服务器内部错误"),

    /**
     * 成功
     */
    SUCCESS(0, "成功"),

    /* 参数错误：1001-1999 */
    /**
     * 参数无效
     */
    PARAM_IS_INVALID(1001, "参数无效"),
    /**
     * 参数为空
     */
    PARAM_IS_BLANK(1002, "参数为空"),
    /**
     * 参数类型错误
     */
    PARAM_TYPE_ERROR(1003, "参数类型错误"),
    /**
     * 参数缺失
     */
    PARAM_NOT_COMPLETE(1004, "参数缺失"),
    /**
     * 参数格式有误
     */
    PARAM_FORMAT_ERROR(1004, "参数格式有误"),
    /**
     * 参数长度超出限制
     */
    INVALID_PARAM_LENGTH(1005, "参数长度超出限制"),


    /* 用户错误：2001-2999*/
    /**
     * 用户未登录或认证已过期
     */
    USER_NOT_LOGIN(2001, "用户未登录或认证已过期"),
    /**
     * 账号不存在或密码错误
     */
    USER_LOGIN_ERROR(2002, "账号不存在或密码错误"),
    /**
     * 账号已被禁用
     */
    USER_DISABLED(2003, "账号已被禁用"),
    /**
     * 用户不存在
     */
    USER_NOT_EXIST(2004, "用户不存在"),
    /**
     * 用户已存在
     */
    USER_HAS_EXISTED(2005, "用户已存在"),


    /* 业务错误：3001-3999 */
    /**
     * OAuth错误
     */
    INVALID_CLIENT(3001, "client_id或client_secret参数无效"),
    EXPIRED_TOKEN(3002, "token过期"),

    /* 系统错误：4001-4999 */
    /**
     * 系统繁忙，请稍后重试
     */
    SYSTEM_BUSY(4001, "系统繁忙，请稍后重试"),
    /**
     * 系统错误，对象为空
     */
    SYSTEM_OBJ_NULL(4002, "系统错误，对象为空"),


    /* 数据错误：5001-5999 */
    /**
     * 数据未找到
     */
    DATA_NONE(5001, "数据未找到"),
    /**
     * 数据有误
     */
    DATA_WRONG(5002, "数据有误"),
    /**
     * 数据已存在
     */
    DATA_ALREADY_EXISTED(5003, "数据已存在"),
    /**
     * 数据发生异常
     */
    DATA_VERIDIFY_ERROR(5004, "数据发生异常"),

    /* 接口错误：6001-6999 */
    /**
     * 请求方式错误
     */
    INVALID_REQUEST_METHOD(6000, "接口请求方式错误"),
    /**
     * 内部系统接口调用异常
     */
    INTERFACE_INNER_INVOKE_ERROR(6001, "内部系统接口调用异常"),
    /**
     * 外部系统接口调用异常
     */
    INTERFACE_OUTER_INVOKE_ERROR(6002, "外部系统接口调用异常"),
    /**
     * 该接口禁止访问
     */
    INTERFACE_FORBID_VISIT(6003, "该接口禁止访问"),
    /**
     * 接口地址无效
     */
    INTERFACE_ADDRESS_INVALID(6004, "接口地址无效"),
    /**
     * 接口请求超时
     */
    INTERFACE_REQUEST_TIMEOUT(6005, "接口请求超时"),
    /**
     * 接口负载过高
     */
    INTERFACE_EXCEED_LOAD(6006, "接口负载过高"),

    /* 权限错误：7001-7999 */
    /**
     * 无访问权限
     */
    PERMISSION_NO_ACCESS(7001, "无访问权限");

    /**
     * 代码
     */
    private Integer code;
    /**
     * 信息
     */
    private String msg;

    /**
     * 通过代码和信息构建
     *
     * @param code 代码
     * @param msg  信息
     */
    ApiResultCode(Integer code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    /**
     * 获取代码
     *
     * @return 代码值
     */
    public Integer code() {
        return this.code;
    }

    /**
     * 获取信息
     *
     * @return 信息
     */
    public String msg() {
        return this.msg;
    }

    /**
     * 转化为字符串，直接返回定义名
     *
     * @return 定义名
     */
    @Override
    public String toString() {
        return this.name();
    }

}
